package cn.leaf.calculator.resolver;


import cn.leaf.calculator.bean.ParameterBeanDefinition;
import org.springframework.core.env.Environment;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 使用 {@link Environment} 方式的解析器，
 * <p>
 * 公式需符合{@code #{#A}+#{#B} }
 * </p>
 * <p>
 * 公式中的参数需要 #{#param} 包裹
 * </p>
 *
 * @author 李克国
 * @version 1.0.0

 */
public class SpELFormulaBeanResolver<T> implements FormulaBeanDefinitionResolver<T> {


    public static final String PARAM = "(?<=#\\{#)(.+?)(?=\\})";

    /**
     * 解析：公式需符合{@code #{#A}+#{#B} }
     *
     * @param formulaString 公式字符串
     * @return map 其中id为key ，value为空
     */
    @Override
    public Map<Serializable, ParameterBeanDefinition<T>> resolve(String formulaString) {
        if (formulaString == null) {
            return new HashMap<>(0);
        }

        Matcher matcher = Pattern.compile(PARAM).matcher(formulaString);
        Map<Serializable, ParameterBeanDefinition<T>> result = new HashMap<>(16);
        while (matcher.find()) {
            result.put(matcher.group(), null);
        }
        return result;
    }

    @Override
    public void refresh() {

    }

    @Override
    public boolean validate() {
        return false;
    }
}
